package com.metadata_system.common.db.entity;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.*;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.metadata_system.system.response.NodePropertiesItem;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Table(name = "md_metadata_node")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MetadataNode {
    @Id
    private Integer id;

    /**
     * 元数据ID
     */
    @Column(name = "metadata_id")
    private Integer metadataId;

    /**
     * 元数据视图ID
     */
    @Column(name = "metadata_view_id")
    private Integer metadataViewId;

    /**
     * 元素-名称
     */
    private String name;

    /**
     * 唯一标识(复用元素)
     */
    @Column(name = "unique_key")
    private String uniqueKey;

    /**
     * 是否是主节点: 0.否 1.是
     */
    @Column(name = "is_main")
    private Integer isMain;

    /**
     * 坐标(x,y)
     */
    private String position;

    /**
     * 属性数据
     */
    private String properties;

    /**
     * 属性数据-键
     */
    @Column(name = "properties_key")
    private String propertiesKey;

    /**
     * 引用数据总数
     */
    @Column(name = "data_total")
    private Integer dataTotal;

    /**
     * 创建时间
     */
    @Column(name = "created_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date createdTime;

    /**
     * 更新时间
     */
    @Column(name = "updated_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date updatedTime;


    public Map<String,NodePropertiesItem> getPropertiesPropTypeMap(){
        HashMap<String, NodePropertiesItem> propTypeMap = new HashMap<>();
        List<NodePropertiesItem> nodePropertiesItems = JSON.parseArray(this.properties, NodePropertiesItem.class);
        for (NodePropertiesItem nodePropertiesItem : nodePropertiesItems) {
            propTypeMap.put(nodePropertiesItem.getProp(),nodePropertiesItem);
        }
        return propTypeMap;
    }
}